const path = require('path')
const CompressionPlugin = require('compression-webpack-plugin')
// 20221126 cfm add: 加载速度优化
const webpack = require('webpack')

function resolve(dir) {
  return path.join(__dirname, dir)
}

//  vue.config.js
module.exports = {
  /*
    Vue-cli3:
    Crashed when using Webpack `import()` #2463
    https:// github.com/vuejs/vue-cli/issues/2463
   */
  //  如果你不需要生产环境的 source map，可以将其设置为 false 以加速生产环境构建。
  productionSourceMap: false,
  // qiankuan打包时放开
  // outputDir: "../dist/main",
  //  多入口配置
  //  pages: {
  //    index: {
  //      entry: 'src/main.js',
  //      template: 'public/index.html',
  //      filename: 'index.html',
  //    }
  //  },
  //  打包app时放开该配置
  //  publicPath:'/',
  configureWebpack: config => {
    // 生产环境取消 console.log
    if (process.env.NODE_ENV === 'production') {
      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
    }
  },
  chainWebpack: (config) => {
    // 20221126 cfm add: 加载速度优化
    //  移除prefetch插件，它是用来在浏览器加载完页面后，利用空闲时间预获取将可能访问的内容
    config.plugins.delete('prefetch')
    //  按需加载moment中文语言包
    config.plugin('ContextReplacementPlugin').use(webpack.ContextReplacementPlugin, [/moment[/\\]locale$/, /zh-cn/])

    config.resolve.alias
      .set('@$', resolve('src'))
      .set('@api', resolve('src/api'))
      .set('@assets', resolve('src/assets'))
      .set('@comp', resolve('src/components'))
      .set('@views', resolve('src/views'))

    // 生产环境，开启js\css压缩
    if (process.env.NODE_ENV === 'production') {
      config.plugin('compressionPlugin').use(new CompressionPlugin({
        test: /\.(js|css|less)$/, //  匹配文件名
        threshold: 10240, //  对超过10k的数据压缩
        deleteOriginalAssets: false //  不删除源文件
      }))

      // 20221126 cfm add: 加载速度优化
      //  解决打包后chunk.js文件过多问题：maxChunks为生成的最多文件数
      config.plugin('chunkPlugin').use(webpack.optimize.LimitChunkCountPlugin, [{ maxChunks: 5, minChunkSize: 10000 }])
    }

    //  配置 webpack 识别 markdown 为普通的文件
    config.module
      .rule('markdown')
      .test(/\.md$/)
      .use()
      .loader('file-loader')
      .end()

    //  编译vxe-table包里的es6代码，解决IE11兼容问题
    config.module
      .rule('vxe')
      .test(/\.js$/)
      .include
      .add(resolve('node_modules/vxe-table'))
      .add(resolve('node_modules/vxe-table-plugin-antd'))
      .end()
      .use()
      .loader('babel-loader')
      .end()
  },

  css: {
    loaderOptions: {
      less: {
        modifyVars: {
          /* less 变量覆盖，用于自定义 ant design 主题 */
          'primary-color': '#1890FF',
          'link-color': '#1890FF',
          'border-radius-base': '4px'
        },
        javascriptEnabled: true
      }
    }
  },

  devServer: {
    port: 80,
    //  hot: true,
    disableHostCheck: true,
    //  overlay: {
    //      warnings: false,
    //      errors: true,
    //  },
    //  headers: {
    //      'Access-Control-Allow-Origin': '*',
    //  },
    proxy: {
      /*  '/api': {
         target: 'https:// mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', // mock API接口系统
         ws: false,
         changeOrigin: true,
         pathRewrite: {
           '/jeecg-boot': ''  // 默认所有请求都加了jeecg-boot前缀，需要去掉
         }
       },
       */
      /* 注意：jeecgboot前端做了改造，此处不需要配置跨域和后台接口（只需要改.env相关配置文件即可）
          issues/3462 很多人此处做了配置，导致刷新前端404问题，请一定注意
          */
      '/jeecg-boot': {
        target: 'http:// localhost:8080',
        ws: false,
        changeOrigin: true
      }
    }
  },
  lintOnSave: undefined
}
